package com.start.bean;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

public class RegisterBeanDefinitionsTest implements ImportBeanDefinitionRegistrar {
	/**
	 * AnnotationMetadata:当前类的注册信息
	 * BeanDefinitionRegistry:BeanDefinition注册类：调用BeanDefinitionRegistry.registerBeanDefinition手工注册Bean。
	 */
	@Override
	public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
		// registry.containsBeanDefinition方法用于判断IOC容器中使用否有已注册了指定的Bean，参数为Bean的id。
		boolean containsBeanDefinition = registry.containsBeanDefinition("com.start.bean.BookDao");
		// 可以进行判断，再决定是否注册Bean。
		if (containsBeanDefinition) {
			BeanDefinition beanDefinition = new RootBeanDefinition(Person.class);
			// registerBeanDefinition(String beanName, BeanDefinition beanDefinition)：
			// beanName：要注册的Bean的Id，beanDefinition：要调用BeanDefinition的实现类，进行注册Bean。
			registry.registerBeanDefinition("personTest", beanDefinition);
		}
	}

}
